package com.ftg.learn.framework.mybatis.chapter01;

import com.ftg.learn.framework.mybatis.chapter01.entity.TeacherEntity;
import org.apache.ibatis.binding.MapperRegistry;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 说明
 * <p>
 * 爬虫 -- 爬取数据  人工  机器学习  自然(py 类库 | 数据处理 .. scale)
 * <p>
 * mysql data 慢  容量大
 * <p>
 * jdbc:mysql (自行封装 -mybatis(大量的java 封装关于jdbc的企业级别操作)- )      (全文索引数据库(linux)  ES 分词器(linux))
 * <p>
 * java 内存 快
 * <p>
 * client -  web 前端
 * <p>
 * 用来完成代码的
 * <p>
 * request / response 系统
 *
 * @author 布衣
 */
public class Introduction {

    public static void main(String[] args) {
        //配置它
        String path = "mybatisconfig.xml";

        //帮我们读取 mybatisconfig里面的信息
        Reader resourceAsReader = null;
        SqlSession sqlSession = null;
        try {
            resourceAsReader = Resources.getResourceAsReader(path);

            //把读取到的信息给mybatis核心类
            //构建器类 - 用于生成sqlsessionfactory
            SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();

            //生成了一个sqlsessionfactory
            SqlSessionFactory ssf = ssfb.build(resourceAsReader);

            //打开缓存
            sqlSession = ssf.openSession(true);

            //就是我们的容器
            //映射文件注册表类

            //23 设计模式之一  代理模式
            DemoMapper demoMapper = sqlSession.getMapper(DemoMapper.class);

            //打印出来  select * from demo 查询的全部数据
//            demoMapper.list();
            Map<String,String> str = new HashMap<>();
            str.put("tno","t001");
            str.put("tname","刘阳");
            List<TeacherEntity> maps = demoMapper.listByParameter2(str);
            for (TeacherEntity map : maps) {
                System.out.println(map.getTeacherName());
            }

        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
        }


    }

}
